package com.rec.smile.chemical.echo;

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;

import java.net.InetSocketAddress;

public class EchoClient {
  private final String host;
  private final int port;

  public EchoClient(String host, int port) {
    this.host = host;
    this.port = port;
  }

  public void start() throws Exception {
    EventLoopGroup group = new NioEventLoopGroup();
    try {
      Bootstrap b = new Bootstrap();
      b.group(group);
      b.channel(NioSocketChannel.class);
      b.remoteAddress(new InetSocketAddress(host, port));
      b.handler(new ChannelInitializer<SocketChannel>() {

        public void initChannel(SocketChannel ch) throws Exception {
          ch.pipeline().addLast(new EchoClientHandler());
        }
      });
      ChannelFuture f = b.connect().sync();
      f.addListener(new ChannelFutureListener() {
        
        public void operationComplete(ChannelFuture future) throws Exception {
          if(future.isSuccess()){
            System.out.println("client connected");
          }else{
            System.out.println("server attemp failed");
            future.cause().printStackTrace();
          }
          
        }
      });
      f.channel().closeFuture().sync();
    } finally {
      group.shutdownGracefully().sync();
    }
  }

  public static void main(String[] args) throws Exception {
  
    new EchoClient("127.0.0.1", 9527).start();
  }
}